package entidadesBD;

import java.io.Serializable;
import java.sql.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.Transient;

import entidadesVO.*;

@Entity
@Table(name = "palc")
public class PALC implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Tienda tienda;
	private Date fechaPALC;
	private Set<ArticulosPALC> articulosPALC = new HashSet<ArticulosPALC>();
	
	private int codigoPALC;

	public PALC(Tienda tienda, Date fechaPALC) {
		this.tienda = tienda;
		this.fechaPALC = fechaPALC;
	}
	/*
	 * Constructor Vacio
	 */
	public PALC(){
		
	}
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public int getCodigoPALC() {
		return codigoPALC;
	}
	public void setCodigoPALC(int codigoPALC) {
		this.codigoPALC = codigoPALC;
	}
	
	@Column
	public Date getFechaPALC() {
		return fechaPALC;
	}
	public void setFechaPALC(Date fechaPALC) {
		this.fechaPALC = fechaPALC;
	}
	
	@OneToOne
	@JoinColumn(name = "tienda")
	public Tienda getTienda() {
		return tienda;
	}
	public void setTienda(Tienda tienda) {
		this.tienda = tienda;
	}
	
	@OneToMany(mappedBy = "palc", fetch = FetchType.EAGER, cascade={CascadeType.ALL})
	public Set<ArticulosPALC> getArticulosPALC() {
		return articulosPALC;
	}
	public void setArticulosPALC(Set<ArticulosPALC> articulosPALC) {
		this.articulosPALC = articulosPALC;
	}
	public void addArticulosPALC(ArticulosPALC articulosPALC){
		this.articulosPALC.add(articulosPALC);
	}
	
	@Transient
	public PALCVO getPALCVO(){
		
		TiendaVO tiendaVO = new TiendaVO();
		tiendaVO = tienda.getTiendaVO();
		
		Object[] articulosPALCArray = articulosPALC.toArray();
		
		PALCVO palcVO = null;
		palcVO = new PALCVO(tiendaVO, fechaPALC);
		palcVO.setCodigoPALC(codigoPALC);
		
		for (int i = 0; i < articulosPALCArray.length; i++){
			ArticulosPALCVO aPVO = new ArticulosPALCVO();
			ArticulosPALC aP = (ArticulosPALC) articulosPALCArray[i];
			aPVO = aP.getArticulosPALCVO();
			palcVO.addArticulosPALC(aPVO);
		}
		
		return palcVO;
	}
	
	public void setPALC(PALCVO palcVO){
		
		this.fechaPALC = palcVO.getFechaPALC();
	}
}
